﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using BusinessLogicLayer.Global;
using BusinessLogicLayer.Logistica;
using BusinessEntityLayer.Resultado;
using Telerik.WinControls.UI;

namespace Reportes.Logistica
{
    public partial class LogisticaIngresosModificarExtraodinario : Form
    {
        public LogisticaIngresosModificarExtraodinario()
        {
            InitializeComponent();
        }


        private static LogisticaIngresosModificarExtraodinario m_FormDefInstance;
        public static LogisticaIngresosModificarExtraodinario DefInstance
        {
            get
            {
                if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed)
                    m_FormDefInstance = new LogisticaIngresosModificarExtraodinario();
                return m_FormDefInstance;
            }
            set
            {
                m_FormDefInstance = value;
            }
        }


        #region "Procedimientos"

        private void CargarEmpresa()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvGlobal.Fnc_Listar_Empresas();

                if (VL_BeanResultado.blnExiste == true)
                {
                    cboEmpresa.DataSource = VL_BeanResultado.dtResultado;
                    cboEmpresa.DisplayMember = "EmprDescripcion";
                    cboEmpresa.ValueMember = "EmprCodigo";
                    cboEmpresa.SelectedValue = "01";

                    //CargarAlmacen();
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void CargarAlmacen()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvGlobal.Fnc_Listar_AlmacenEmpresa(cboEmpresa.SelectedValue.ToString());

                if (VL_BeanResultado.blnExiste == true)
                {
                    cboAlmacen.DataSource = VL_BeanResultado.dtResultado;
                    cboAlmacen.DisplayMember = "AlmDescripcion";
                    cboAlmacen.ValueMember = "AlmCodigo";
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaIngresosCabecera()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_Ingresos_Cabecera(VL_EMPRCODIGO, VL_ALMCODIGO, VL_RAZONSOCIAL, VL_NRODOCREFERENCIA, VL_FECHA_INICIO, VL_FECHA_FIN);

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvLista.DataSource = VL_BeanResultado.dtResultado;
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaIngresosDetalle()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_Ingresos_Detalle(VL_EMPRCODIGO, VL_AINGCODIGO);

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvSubLista.DataSource = VL_BeanResultado.dtResultado;
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarTipoMovimiento()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_Tipo_Movimiento();

                if (VL_BeanResultado.blnExiste == true)
                {
                    cboTipoMovimiento.DataSource = VL_BeanResultado.dtResultado;
                    cboTipoMovimiento.DisplayMember = "TMVDESCRIPCION";
                    cboTipoMovimiento.ValueMember = "MOVCODIGO";
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void CargarListaOrdenCompra()
        {
            SrvGlobal VL_SrvGlobal = new SrvGlobal();
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();

            BeanResultado.ResultadoSelect VL_BeanResultado = new BeanResultado.ResultadoSelect();

            try
            {
                VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Listar_OrdenCompra(txtNroOrden.Text,cboPeriodo.Text);

                if (VL_BeanResultado.blnExiste == true)
                {
                    dgvOrdenBusqueda.Visible = true;
                    dgvOrdenBusqueda.DataSource = VL_BeanResultado.dtResultado;
                }
                else
                {
                    MessageBox.Show(VL_BeanResultado.strMensaje, "Mensaje del Sistema");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Mensaje del Sistema");
            }

        }

        private void Actualizar_Ingreso_Movimiento()
        {
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Actualizar_Tipo_Movimiento(VL_AINGCODIGO, VL_EMPRCODIGO,VL_MOVCODIGO,VL_MOVIMIENTO,VL_OCOCODIGO,VL_PDOCODIGOOC);

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        private void Actualizar_Precios(String VI_AINGCODIGO, String VI_DINGCODIGO, String VI_EMPRCODIGO, Decimal VI_DINGIMPORTEGRUPAL, Decimal VI_DINGPRECIOGRUPAL, Decimal VI_DINGPRECIOUNI)
        {
            SrvModificarIngresos VL_SrvModificarIngresos = new SrvModificarIngresos();
            BeanResultado.ResultadoTransaccion VL_BeanResultado = new BeanResultado.ResultadoTransaccion();

            VL_BeanResultado = VL_SrvModificarIngresos.Fnc_Actualizar_Precios(VI_AINGCODIGO, VI_DINGCODIGO, VI_EMPRCODIGO, VI_DINGIMPORTEGRUPAL, VI_DINGPRECIOGRUPAL, VI_DINGPRECIOUNI);

            if (VL_BeanResultado.blnResultado == false)
            {
                MessageBox.Show(VL_BeanResultado.strMensaje, "Error");
                return;
            }
            else
            {
                return;
            }

        }

        #endregion

        #region "Declaraciones"

        String VL_EMPRCODIGO = "";
        String VL_ALMCODIGO = "";
        String VL_FECHA_INICIO = "";
        String VL_FECHA_FIN = "";
        String VL_RAZONSOCIAL = "";
        String VL_NRODOCREFERENCIA = "";


        String VL_AINGCODIGO;
        String VL_DESTINO;
        String VL_MONCODIGO;


        String VL_MOVCODIGO;
        String VL_MOVIMIENTO;

        String VL_OCOCODIGO;
        String VL_PDOCODIGOOC;

        String VL_DAINGCODIGO;
        Decimal VL_DINGIMPORTEGRUPAL;
        Decimal VL_DINGPRECIOGRUPAL;

        #endregion

        private void LogisticaIngresosModificarExtraodinario_Load(object sender, EventArgs e)
        {
            CargarEmpresa();
            CargarAlmacen();
            CargarTipoMovimiento();
            
        }

        private void cboEmpresa_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            if (cboEmpresa.Items.Count > 0)
            {
                CargarAlmacen();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            VL_EMPRCODIGO = cboEmpresa.SelectedValue.ToString();
            VL_ALMCODIGO = cboAlmacen.SelectedValue.ToString();
            VL_RAZONSOCIAL = txtRazonSocial.Text;
            VL_NRODOCREFERENCIA = txtNroDocReferencia.Text;
            VL_FECHA_INICIO = dtpInicio.Text;
            VL_FECHA_FIN = dtpFin.Text;

            CargarListaIngresosCabecera();
        }

        private void dgvLista_Click(object sender, EventArgs e)
        {
     

        }

        private void dgvLista_DoubleClick(object sender, EventArgs e)
        {
            VL_AINGCODIGO = dgvLista.CurrentRow.Cells["AINGCODIGO"].Value.ToString() + "";
            VL_EMPRCODIGO = dgvLista.CurrentRow.Cells["EmprCodigo"].Value.ToString() + "";

            cboTipoMovimiento.Text = dgvLista.CurrentRow.Cells["MOVIMIENTO"].Value.ToString();


            CargarListaIngresosDetalle();
            cboTipoMovimiento.Enabled = false;
            txtNroOrden.Enabled = false;
            cboPeriodo.Enabled = false;
            txtNroOrden.Text = "";
            btnGuardarTipoMovimiento.Enabled = false;

            dgvOrdenBusqueda.DataSource = null;
            dgvOrdenBusqueda.Visible = false;
            rbcTipoMovimiento.Checked = false;


        }

        private void rbcTipoMovimiento_ToggleStateChanged(object sender, Telerik.WinControls.UI.StateChangedEventArgs args)
        {
            if (rbcTipoMovimiento.Checked ==true)
            {
                cboTipoMovimiento.Enabled = true;
                btnGuardarTipoMovimiento.Enabled = true;
                txtNroOrden.Enabled = true;
                cboPeriodo.Enabled = true;
                txtNroOrden.Text = "";
                dgvOrdenBusqueda.DataSource = null;
            }
            else
            {
                cboTipoMovimiento.Enabled = false;
                btnGuardarTipoMovimiento.Enabled = false;
                txtNroOrden.Enabled = false;
                cboPeriodo.Enabled = false;
                txtNroOrden.Text = "";
                dgvOrdenBusqueda.Visible = false;
                dgvOrdenBusqueda.DataSource = null;
            }
        }

        private void txtNroOrden_TextChanged(object sender, EventArgs e)
        {
            if (txtNroOrden.Text.Length >0)
            {
                CargarListaOrdenCompra();
                if (dgvOrdenBusqueda.Rows.Count > 0)
                {
                    dgvOrdenBusqueda.Visible = true;
                }
                else
                {
                    dgvOrdenBusqueda.Visible = false;
                }
            }
            
        }

        private void txtNroOrden_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Down:
                    if (this.dgvOrdenBusqueda.CurrentCell.RowIndex < this.dgvOrdenBusqueda.RowCount -1)
                    {
                        dgvOrdenBusqueda.Rows[dgvOrdenBusqueda.CurrentCell.RowIndex + 1].IsSelected = true;
                        dgvOrdenBusqueda.Rows[dgvOrdenBusqueda.CurrentCell.RowIndex + 1].IsCurrent = true;

                    };
                    e.Handled = true;
                    break;

                case Keys.Up:
                    if (this.dgvOrdenBusqueda.CurrentCell.RowIndex > 0)
                    {
                        dgvOrdenBusqueda.Rows[dgvOrdenBusqueda.CurrentCell.RowIndex - 1].IsSelected = true;
                        dgvOrdenBusqueda.Rows[dgvOrdenBusqueda.CurrentCell.RowIndex - 1].IsCurrent = true;
                    }
                    e.Handled = true;
                    break;
                default:
                    break;
            }
        }

        private void dgvOrdenBusqueda_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                if (dgvOrdenBusqueda.Rows.Count > 0)
                {
                    VL_OCOCODIGO = dgvOrdenBusqueda.CurrentRow.Cells["OcoCodigo"].Value.ToString() + "";
                    VL_PDOCODIGOOC = dgvOrdenBusqueda.CurrentRow.Cells["PdoCodigo"].Value.ToString() + "";
                    txtNroOrden.Text = dgvOrdenBusqueda.CurrentRow.Cells["OcoNumero"].Value.ToString() + "";
                    dgvOrdenBusqueda.Visible = false;
                }
            }
        }

        private void btnGuardarTipoMovimiento_Click(object sender, EventArgs e)
        {

            VL_MOVCODIGO = cboTipoMovimiento.SelectedValue.ToString();
            VL_MOVIMIENTO = cboTipoMovimiento.Text;

            Actualizar_Ingreso_Movimiento();
        }

        private void txtNroOrden_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter))
            {
                if (dgvOrdenBusqueda.Rows.Count > 0)
                {
                    VL_OCOCODIGO = dgvOrdenBusqueda.CurrentRow.Cells["OcoCodigo"].Value.ToString() + "";
                    VL_PDOCODIGOOC = dgvOrdenBusqueda.CurrentRow.Cells["PdoCodigo"].Value.ToString() + "";
                    txtNroOrden.Text = dgvOrdenBusqueda.CurrentRow.Cells["OcoNumero"].Value.ToString() + "";
                    dgvOrdenBusqueda.Visible = false;
                }
            }
        }

        private void btnGuardarPrecios_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dgvSubLista.Rows.Count; ++i)
            {
                VL_AINGCODIGO = dgvSubLista.Rows[i].Cells["AingCodigo"].Value.ToString();
                VL_DAINGCODIGO = dgvSubLista.Rows[i].Cells["DIngCodigo"].Value.ToString();
                VL_DINGIMPORTEGRUPAL = decimal.Parse(dgvSubLista.Rows[i].Cells["DINGIMPORTEGRUPAL"].Value.ToString());
                VL_DINGPRECIOGRUPAL = decimal.Parse(dgvSubLista.Rows[i].Cells["DINGPRECIOGRUPAL"].Value.ToString());
                

                Actualizar_Precios(VL_AINGCODIGO, VL_DAINGCODIGO,VL_EMPRCODIGO,VL_DINGIMPORTEGRUPAL,VL_DINGPRECIOGRUPAL,0);

            }
        }

        private void dgvSubLista_CellEndEdit(object sender, Telerik.WinControls.UI.GridViewCellEventArgs e)
        {
            if (e.Value != null)
            {

                if (chkIncluyeIGV.Checked == true)
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value) / 1.18) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));

                    //CalculoTotal();

                }
                else
                {
                    dgvSubLista.CurrentRow.Cells["DIngImporteGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)), 5));
                    dgvSubLista.CurrentRow.Cells["DIngPrecioGrupal"].Value = Convert.ToString(Math.Round((Convert.ToDouble(e.Value)) / Convert.ToDouble(dgvSubLista.CurrentRow.Cells["CantidadGrupoContada"].Value), 5));

                    //CalculoTotal();
                }

            }
        }
    }
}
